Спринт 1/18 → Тема 8/13: Словари → Урок 1/1
Тип dict: словари
Словарь в Python (тип данных dict) — это неупорядоченная коллекция элементов; каждый элемент словаря состоит из пары
ключ:значение. Аналогией можно считать толковый словарь, где каждому отдельному слову соответствует его определение.
Синтаксис словарей:
- словари в Python записываются в фигурных скобках
{}; - между ключом и значением ставится двоеточие
:; - в пределах словаря каждый ключ уникален;
- элементы словаря разделяются запятой.
Словарь — это удобно
В программе, получающей данные из онлайн-кинотеатра, данные о фильмах хранились отдельными списками:
PYTHON
Все эти данные можно хранить в одном словаре, сопоставив названия фильмов и их оценки:
PYTHON
В этом словаре ключами служат строки
str, названия фильмов. Ключами могут быть любые неизменяемые объекты.
PYTHON
Литеральное объявление словаря
Литерал для словаря такой же, как и для множества — фигурные скобки
{}. Через этот литерал можно создавать и пустые словари.PYTHON
Объявление словаря через функцию dict()
Для создания словаря можно применить функцию
dict(), в качестве аргумента ей передаётся список кортежей, каждый из которых должен состоять из двух элементов; эти кортежи будут преобразованы в элементы словаря. В каждом элементе словаря ключом будет элемент кортежа с индексом
[0] (он должен быть объектом неизменяемого типа), а значением для этого ключа будет элемент с индексом [1].PYTHON
Если в каких-то кортежах, переданных в
dict(), элементы [0] совпадут — в итоговый словарь попадёт последнее значение для дублирующегося ключа.Выполните код и посмотрите, как
dict() обработает повторяющиеся ключи:КодPYTHON
Запустите программу и убедитесь, что результатом будет словарь.
Подставьте вместо названия фильма числовое значение и проверьте что получится.
КодPYTHON
Есть и другие способы объявить словарь.
Метод dict.fromkeys()
Метод принимает в качестве обязательного аргумента последовательность элементов. Значения элементов будут ключами словаря.
Вторым, необязательным аргументом можно передать любой объект, который будет значением для всех ключей словаря. По умолчанию он равен
None.PYTHON
Функция zip()
Функция-упаковщик
zip() принимает в качестве аргументов итерируемые объекты, а возвращает объект типа zip — это коллекция кортежей. Каждый из кортежей содержит элементы исходных коллекций с одинаковыми индексами.Функция
zip() может принять на вход любое количество последовательностей; если передать в zip() три последовательности — каждый кортеж в zip-объекте будет содержать три элемента.Напечатать zip-объект невозможно: содержимое упаковано.
PYTHON
Однако обращаться к элементам zip-объекта можно точно так же, как и к элементам любой другой последовательности.
Объекты типа
zip — итерируемые. Переберите в цикле элементы объекта movies_info и напечатайте их.КодPYTHON
Передадим объект типа
zip в качестве аргумента функции dict():PYTHON
Готово! Из двух последовательностей собрали словарь, буквально двумя строками кода.
Преобразование из zip-объекта в словарь сработает только в том случае, если в zip упакованы две последовательности. В любом другом случае при попытке создать словарь из zip-объекта функция
dict() вернёт ошибку.PYTHON
Хозяйке на заметку: если последовательности, переданные в
zip(), не совпадают по длине — ничего не сломается. Функция zip() умная, она самостоятельно отсечёт лишние элементы.PYTHON
Создание словаря через dict comprehensions
Словари, как и списки, можно создавать при помощи компактной конструкции dict comprehensions.
Эта конструкция создаёт словарь на основе значений какой-то исходной последовательности, пробегаясь по ней циклом, получая её элементы и создавая ключи и значения элементов словаря.
PYTHON
В этой записи
<ключ> и <значение> составляют элемент словаря; они могут быть любыми выражениями, которые создадут этот элемент.PYTHON
Например, если из списка фильмов необходимо создать словарь, в котором ключами будут названия фильмов, а значениями — их категория, для всех одинаковая, то можно написать такой код:
PYTHON
Методы словарей
Обращение к элементам словаря
Получить значение списка или кортежа можно обратившись к нему по индексу, но словарь — это неупорядоченная коллекция, и обращение по индексу вызовет исключение.
PYTHON
Единственный способ получить значения словаря — обратиться к нему по ключу.
PYTHON
Значением словаря может быть вложенный словарь; это бывает удобно для хранения структурированной информации. Например все параметры фильма можно хранить под осмысленными ключами.
Проверка «есть ли ключ в словаре?»
Проверить, есть ли запрашиваемый ключ в словаре, можно через оператор
in, он работает так же, как и в других коллекциях.PYTHON
Метод get()
Метод
get() возвращает из словаря значение по ключу. Если запрошенный ключ не найден — вернётся None или значение, переданное вторым аргументом; это отличает метод dict.get(key) от обращения к значению по ключу dict[key]: если запрошенный ключ не найден — dict[key] вызовет ошибку.PYTHON
Добавление нового элемента в словарь
Для добавления элемента в словарь нужно новому ключу словаря присвоить значение.
PYTHON
Таким же способом можно изменить значение для существующего ключа словаря
Рейтинг фильма «Хакеры» поднялся до максимального значения: 5.0. Задайте новое значение рейтинга для этого фильма в словаре
movies.КодPYTHON
Объединение словарей
Объединить словари можно методом
update(). Он работает по принципу «добавить все элементы второго словаря в первый»:PYTHON
Удаление элемента из словаря
Для удаления элемента словаря применяется оператор
del.Онлайн-кинотеатр избавляется от непопулярных фильмов: необходимо удалить из словаря все фильмы, рейтинг которых ниже 4.5:
PYTHON
Можно не просто удалить элемент словаря, но и вернуть значение удаляемого элемента. Для этого применяется метод
pop(). Он принимает два аргумента pop(key, default):key— ключ элемента, который нужно удалить из словаря;- необязательный аргумент
default— значение, которое вернёт метод в случае, если переданный ключ не найден в словаре.
PYTHON
Получение ключей и значений элементов словаря
Метод
keys() возвращает объект dict_keys — это последовательность, хранящая ключи словаря. Метод values() возвращает объект dict_values: это последовательность, элементами которой будут значения словаря.PYTHON
Перебор словаря
Перебрать все элементы словаря можно циклом
for. При этой операции в переменную цикла будет передаваться только ключ элемента словаря:PYTHON
Выражение
for movie_name in movies эквивалентно выражению for movie_name in movies.keys(): по умолчанию перебор словаря выполняется по его ключам.Можно перебрать и значения словаря: для этого надо перебирать не словарь, а объект
dict_values, полученный из словаря с помощью метода values():PYTHON
Чтобы получить из словаря пары
ключ:значение — применяют метод items(). Он преобразует словарь в объект dict_items — это коллекция кортежей, каждый из которых первым элементом содержит ключ, а вторым — значение элемента словаря.PYTHON
Кортежи из такой коллекции можно распаковать прямо в цикле: для этого нужно после
for указать имена переменных для распаковки:PYTHON
Очистка и копирование словаря
Чтобы очистить словарь — нужно применить метод
clear():PYTHON
Копирование словаря
Метод
copy() создаст независимую копию исходного словаря:PYTHON
Резюме
- Ключи должны быть уникальны в пределах словаря: не может быть двух одинаковых ключей в одном словаре.
- Ключ должен быть строкой, числом или кортежем — неизменяемым объектом.
- Значения могут быть какими угодно, ограничений нет.
Перед решением большой задачи скачайте шпаргалку. В ней — краткое содержание этого урока.
Онлайн-кинотеатр присылает Антону перечень фильмов, рекомендованных к просмотру. Помогите Антону выбрать фильмы с высоким рейтингом и добавить в избранное.
Если рекомендованный фильм имеет рейтинг ниже 4.0 — удалите его из словаря
recommended_movies. При этом программа должна вывести сообщение Все фильмы с рейтингом выше 4.0 программа должна добавить в словарь с избранными фильмами
favorite_movies и вывести сообщение Напечатайте получившуюся коллекцию избранных фильмов.
КодPYTHON